import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by fjc on 2017/3/14.
 */
public class String {
    //直接创建jedis
//    Jedis jedis = new Jedis("localhost",6379);
    //创建对象池
    JedisPool jedisPool = new JedisPool(new JedisPoolConfig(),"localhost",6379);
    //获取jedis
    Jedis jedis = jedisPool.getResource();

    @Test
    public void set(){
        //存储单个
                //key    value
        jedis.set("1","第一");
    }

    @Test
    public void get(){
        //依据key取出value
        System.out.println(jedis.get("1"));
    }

    @Test
    public void getRange(){
        //返回 key 中字符串值的子字符
        jedis.set("2","This is redis");
                                                        //起始下标      //结束下标
        System.out.println(jedis.getrange("2",2,5));
    }

    @Test
    public void getSet(){
        //设置替换指定 key 的值
        jedis.set("3","第三");
        System.out.println(jedis.get("3"));
        jedis.getSet("3","新的第三");
        System.out.println(jedis.get("3"));
    }

    @Test
    public void mGet(){
        //返回所有(一个或多个)给定 key 的值
        System.out.println(jedis.mget("1","2","3"));
    }

    @Test
    public void setEx() throws  Exception{
        //为指定的 key 设置值及其过期时间。如果 key 已经存在， SETEX 命令将会替换旧的值，在设置时间过后删除key-value
                //过期事件不能小于0
        jedis.setex("1",1,"5秒内");
        //5秒内key-value还存在
        Thread.sleep(2000);
        System.out.println(jedis.get("1"));
        Thread.sleep(4000);
        System.out.println(jedis.get("1"));
    }

    @Test
    public void setNx(){
        //只有在 key 不存在时设置 key 的值,
        jedis.setnx("1","第四");
        //key存在是不能覆盖存储的
        System.out.println(jedis.get("1"));
        jedis.setnx("1","2222");
        System.out.println(jedis.get("1"));
    }

    @Test
    public void setRange(){
        //覆写给定 key 所储存的字符串值，从偏移量 offset 开始
        jedis.set("5","This is no.5");
        jedis.setrange("5",5,"new no.5");
        System.out.println(jedis.get("5"));
    }

    @Test
    public void strLen(){
        //获取指定 key 所储存的字符串值的长度
        jedis.set("6","This is no.6");
        System.out.println(jedis.strlen("6"));
    }

    @Test
    public void mSet(){
        //同时设置一个或多个 key-value 对
        jedis.mset("7","第七","8","第八","9","第九");
        System.out.println(jedis.mget("7","8","9"));
    }

    @Test
    public void mSetnx(){
        //同时设置一个或多个 key-value 对，当且仅当所有给定 key 都不存在
        jedis.msetnx("7","mSetnx","8","mSetnx","9","mSetnx");
        System.out.println(jedis.mget("7","8","9"));
        jedis.msetnx("7","new","8","new","9","new");
        System.out.println(jedis.mget("7","8","9"));
    }

    @Test
    public void pSetex() throws Exception{
        //这个命令和 SETEX 命令相似，但它以毫秒为单位设置 key 的生存时间，而不是像 SETEX 命令那样，以秒为单位
        jedis.psetex("1",5000,"5秒内");
        //5秒内key-value还存在
        Thread.sleep(2000);
        System.out.println(jedis.get("1"));
        Thread.sleep(4000);
        System.out.println(jedis.get("1"));
    }

    @Test
    public void incr(){
        //将 key 中储存的数字值增一
        jedis.set("13","0");
        jedis.incr("13");
        System.out.println(jedis.get("13"));
    }

    @Test
    public void incrBy(){
        //将 key 所储存的值加上给定的增量值
        jedis.set("14","0");
        jedis.incrBy("14",5);
        System.out.println(jedis.get("14"));
    }

    @Test
    public void incrByFloat(){
        //将 key 所储存的值加上给定的浮点增量值
        jedis.set("15","0");
        jedis.incrByFloat("15",0.01);
        System.out.println(jedis.get("15"));
    }

    @Test
    public void decr(){
        //将 key 中储存的数字值减一
        jedis.set("16","1");
        jedis.decr("16");
        System.out.println(jedis.get("16"));
    }

    @Test
    public void decrBy(){
        // key 所储存的值减去给定的减量值
        jedis.set("17","5");
        jedis.decrBy("17",5);
        System.out.println(jedis.get("17"));
    }

    @Test
    public void append(){
        // 如果 key 已经存在并且是一个字符串， APPEND 命令将 value 追加到 key 原来的值的末尾
        jedis.set("18","第十八");
        jedis.append("18","个");
        System.out.println(jedis.get("18"));
        //如果key不存在，则相当于set
        jedis.append("19","个");
        System.out.println(jedis.get("19"));
    }
}
